package com.bdqn.ch05.SZ;

import com.bdqn.ch05.SZ.mapper.Paper;

/**
 * TextPaper
 *
 * @aurhor Administrator  whs
 * @since 2024/7/10
 */
public class TextPaper implements Paper {
    //每页字符数
    private int charPerLine = 16;
    //每页行数
    private int linePerPage = 5 ;
    //纸张中的内容
    private String content = "";
    //当前横向位置，从0到charPerLine - 1
    private int posX = 0;
    //当前行数，从0到LinePerPage - 1
    private int posY = 0;
    //当前页数
    private int posP = 1 ;


    /**
     * 获取输出到纸张上的内容
     *
     * @return
     */
    @Override
    public String getContent() {
        String ret = this.content;
        String set = this.content;
        //补齐本页空行 ，并显示页码
        if (!(posX == 0 && posY == 0)){
            int count = linePerPage - posY;
            for (int i = 0; i < count; ++i) {
                ret += Paper.newline;
            }
            ret += "== 第"+posP+"页 ==";
        }
        return ret;
    }

    /**
     * 输出一个字符到纸张
     *
     * @param c
     */
    @Override
    public void putInChar(char c) {
        content += c;
        ++posX;
        //判断是否换行
        if (posX == charPerLine){
            content += Paper.newline;
            posX = 0;
            ++posY;
        }
        //判断是否翻页
        if (posY == linePerPage){
            content += "== 第"+ posP+"页 ==";
            content +=Paper.newline+Paper.newline;
            posY = 0;
            ++posP;
        }

    }

    // setter 方法注入每行字符数
    public void setCharPerLine(int charPerLine) {
        this.charPerLine = charPerLine;
    }
    // setter 方法注入每页行数
    public void setLinePerPage(int linePerPage) {
        this.linePerPage = linePerPage;
    }

}
